﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Interfaces;
using System.Data.SqlClient;
using Indstillinger;

namespace Model
{
    [Serializable]
    public class Leverandør : ILeverandørdata //Implementerer interface
    {
        //Attributter
        private int leverandørId;
        private string navn;
        private string adresse;
        private string postnr;
        private string by;
        private string tlfnr;
        private string www;
        private string email;
        private string kontaktPerson;

        //Konstruktør
        public Leverandør(int leverandørId, string navn, string adresse, string postnr, string by, string tlfnr, string www, string email, string kontaktPerson)
        {
            this.leverandørId = leverandørId;
            this.navn = navn;
            this.adresse = adresse;
            this.postnr = postnr;
            this.by = by;
            this.tlfnr = tlfnr;
            this.www = www;
            this.email = email;
            this.kontaktPerson = kontaktPerson;
        }

        internal static Leverandør opretLeverandør(string navn, string adresse, string postnr, string by, string tlfnr, string www, string email, string kontaktPerson)
        {
            SqlConnection con = new SqlConnection(DbIndstillinger.HentConnectionString());
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            con.Open();

            cmd.CommandText = "OpretLeverandør";
            SqlParameter levId = new SqlParameter("@leverandørId", System.Data.SqlDbType.Int);
            levId.Direction = System.Data.ParameterDirection.Output;
            cmd.Parameters.Add(levId);
         // cmd.Parameters.Add("@leverandørId", System.Data.SqlDbType.Int). = leverandørId.LeverandørId;
            cmd.Parameters.Add("@navn", System.Data.SqlDbType.NVarChar).Value = navn;
            cmd.Parameters.Add("@adresse", System.Data.SqlDbType.NVarChar).Value = adresse;
            cmd.Parameters.Add("@postnr", System.Data.SqlDbType.Int).Value = postnr;
            cmd.Parameters.Add("@byNavn", System.Data.SqlDbType.NVarChar).Value = by;
            cmd.Parameters.Add("@tlf", System.Data.SqlDbType.NVarChar).Value = tlfnr;
            cmd.Parameters.Add("@www", System.Data.SqlDbType.NVarChar).Value = www;
            cmd.Parameters.Add("@email", System.Data.SqlDbType.NVarChar).Value = email;
            cmd.Parameters.Add("@kontaktPerson", System.Data.SqlDbType.NVarChar).Value = kontaktPerson;

            if (cmd.ExecuteNonQuery() != 1)
                return null;

            con.Close();

            return new Leverandør((int)levId.Value, navn, adresse, postnr, by, tlfnr, www, email, kontaktPerson);
        }

        // Metoder
        private void opdaterMig()
        {
            SqlConnection con = new SqlConnection(DbIndstillinger.HentConnectionString());
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            con.Open();
            
            cmd.CommandText = "hentLeverandør";
            cmd.Parameters.Add("@leverandørId", System.Data.SqlDbType.Int).Value = leverandørId;

            SqlDataReader reader = cmd.ExecuteReader();
            reader.Read();

            navn = (string)reader["navn"];
            adresse = (string)reader["adresse"];
            postnr = Convert.ToString((int)reader["postNr"]);
            by = (string)reader["byNavn"];
            tlfnr = (string)reader["tlf"];
            www = (string)reader["www"];
            email = (string)reader["email"];
            kontaktPerson = (string)reader["kontaktPerson"];

            reader.Close();
            con.Close();

        }

        public void Rediger(string navn, string adresse, string postnr, string by, string tlfnr, string www, string email, string kontaktPerson)
        {
            SqlConnection con = new SqlConnection(DbIndstillinger.HentConnectionString());
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            con.Open();

            cmd.CommandText = "redigerLeverandør";
            cmd.Parameters.Add("@leverandørId", System.Data.SqlDbType.Int).Value = this.leverandørId;
            cmd.Parameters.Add("@navn", System.Data.SqlDbType.NVarChar).Value = navn;
            cmd.Parameters.Add("@adresse", System.Data.SqlDbType.NVarChar).Value = adresse;
            cmd.Parameters.Add("@postNr", System.Data.SqlDbType.Int).Value = postnr;
            cmd.Parameters.Add("@byNavn", System.Data.SqlDbType.NVarChar).Value = by;
            cmd.Parameters.Add("@tlf", System.Data.SqlDbType.NVarChar).Value = tlfnr;
            cmd.Parameters.Add("@www", System.Data.SqlDbType.NVarChar).Value = www;
            cmd.Parameters.Add("@email", System.Data.SqlDbType.NVarChar).Value = email;
            cmd.Parameters.Add("@kontaktPerson", System.Data.SqlDbType.NVarChar).Value = kontaktPerson;

            if (cmd.ExecuteNonQuery() != 1)
                return;

            con.Close();

            this.navn = navn;
            this.adresse = adresse;
            this.postnr = postnr;
            this.by = by;
            this.tlfnr = tlfnr;
            this.www = www;
            this.email = email;
            this.kontaktPerson = kontaktPerson;
        }

        // Properties
        public int LeverandørId
        {
            get { return leverandørId; }
        }

        public string Navn
        {
            get
            {
                if (navn == null)
                {
                    this.opdaterMig();
                }
                return navn;
            }
            set { navn = value; }
        }

        public string Adresse
        {
            get
            {
                if (navn == null)
                {
                    this.opdaterMig();
                }
                return adresse;
            }
            set { adresse = value; }
        }

        public string Postnr
        {
            get
            {
                if (navn == null)
                {
                    this.opdaterMig();
                }
                return postnr;
            }
            set { postnr = value; }
        }

        public string By
        {
            get
            {
                if (navn == null)
                {
                    this.opdaterMig();
                }
                return by;
            }
            set { by = value; }
        }

        public string Tlfnr
        {
            get
            {
                if (navn == null)
                {
                    this.opdaterMig();
                }
                return tlfnr;
            }
            set { tlfnr = value; }
        }

        public string Www
        {
            get
            {
                if (navn == null)
                {
                    this.opdaterMig();
                }
                return www;
            }
            set { www = value; }
        }

        public string Email
        {
            get
            {
                if (navn == null)
                {
                    this.opdaterMig();
                }
                return email;
            }
            set { email = value; }
        }

        public string KontaktPerson
        {
            get
            {
                if (navn == null)
                {
                    this.opdaterMig();
                }
                return kontaktPerson;
            }
            set { kontaktPerson = value; }
        }
    }
}
